package com.gengzp.permission.core;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @ClassName PermissionCacheCoreFunc
 * @Description 权限认证框架缓存核心功能方法封装接口
 * @Author gengzp
 * @Date 2025/8/14 0:36
 */
public interface PermissionCacheFunc {

    /**
     * 根据key获取缓存数据字符串
     *
     * @param key 键
     * @return 字符串类型值
     */
    String get(String key);

    /**
     * 根据key集合批量获取缓存数据字符串集合
     *
     * @param keys 键集合
     * @return 字符串类型值集合
     */
    List<String> getMultiKeys(Collection<String> keys);

    /**
     * 获取缓存剩余的过期时间
     *
     * @param key      键
     * @param timeUnit 时间单位
     * @return 剩余过期时间
     */
    Long getExpire(String key, TimeUnit timeUnit);

    /**
     * 保存字符串数据到缓存, 永不过期
     *
     * @param key   键
     * @param value 值
     */
    void set(String key, String value);

    /**
     * 保存字符串数据到缓存, 指定过期时间
     *
     * @param key      键
     * @param value    值
     * @param timeout  过期时间
     * @param timeUnit 时间单位
     */
    void set(String key, String value, Long timeout, TimeUnit timeUnit);

    /**
     * 删除缓存数据
     *
     * @param key 键
     */
    void del(String key);

    /**
     * 批量删除缓存数据
     *
     * @param keys 键集合
     */
    void del(Collection<String> keys);

}
